package cn.taskservice.redis.lock.annotation;

import cn.taskservice.redis.lock.enums.LockType;
import cn.taskservice.redis.lock.enums.LockfailStrategy;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * redis 分布式锁注解(基于redisson 实现)
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedisLock {

    /**
     *设置为动态key,使用springEl解析,防止不同参数的请求之间互相抢锁
     */
    String key();

    /**
     * 获取锁的等待时间
     */
    long waitTime() default 3000;

    /**
     * 锁自动释放时间
     */
    long leaseTime() default 30000;

    /**
     * 时间单位
     */
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;

    /**
     * 尝试获取次数
     */
    int tryNum() default 3;

    /**
     * 锁类型
     */
    LockType lockType() default LockType.REENTRANT_LOCK;

    /**
     *
     * 是否自动续期
     */
    boolean autoRenewal() default false;

    /**
     * 是否降级
     */
    LockfailStrategy failStrategy() default LockfailStrategy.FAIL_FAST;

    /**
     * 降级处理时,业务逻辑
     */
    String beanName() default "";
}
